package opn.srn.command;

import java.util.List;

import opn.srn.common.IConfigurable;
import opn.srn.event.IEvent;

public interface ICommand<T> extends IConfigurable<T> {
	CmdSupportType getSupportedType();

	void execute() throws Exception;

	void addOutHandler(ICommand<?> outHandler);

	List<ICommand<?>> getOutHandlers();

	void onEvent(ICommand<?> source, IEvent event) throws Exception;

	void fireEvent(IEvent event) throws Exception;

	void fireEvent(ICommand<?> source, IEvent event) throws Exception;

	List<String> getPossibleOutEvents();

	List<String> getCanProcessInEvents();

	void printOutHandlers(int tabIndex);
}
